
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using AEL.ACT;
using AEL.DIC;
using AEL.INT;
using BEL;
    
    namespace DEL.INT
    {
    /// <summary>
    /// Acceso a la base de datos
    /// Modulo:Interface 
    /// Inserta el periodo y los meses que esten en Dic_Mes para ese periodo en INT_SUBPERIODO
    /// </summary>
    public class DO_Int_Periodo
    {
    #region Adapter

        private static CEL.INT.DO_Int_Periodo _adpInt_Periodo;
        private static CEL.INT.DO_Int_Periodo adpInt_Periodo
        {
            get
            {
                if (_adpInt_Periodo == null)
                    _adpInt_Periodo = new CEL.INT.DO_Int_Periodo();
                return _adpInt_Periodo;
            }
        }

        private static CEL.INT.DO_Int_Subperiodo _adpInt_Subperiodo;
        private static CEL.INT.DO_Int_Subperiodo adpInt_Subperiodo
        {
            get
            {
                if (_adpInt_Subperiodo == null)
                    _adpInt_Subperiodo = new CEL.INT.DO_Int_Subperiodo();
                return _adpInt_Subperiodo;
            }
        }

        private static CEL.DIC.DO_Dic_Mes _adpDic_Mes;
        private static CEL.DIC.DO_Dic_Mes adpDic_Mes
        {
            get
            {
                if (_adpDic_Mes == null)
                    _adpDic_Mes = new CEL.DIC.DO_Dic_Mes();
                return _adpDic_Mes;
            }
        }
    #endregion
    
    #region Operaciones con datos
    
   
    public static string Insert(Scope s, Int_Periodo oInt_Periodo)
    {
        // Inserto los objetos
        string resultado;
        try
        {
            adpInt_Periodo.Adapter.BeginTransaction();
            adpInt_Subperiodo.Adapter.Transaction = adpInt_Periodo.Adapter.Transaction;
            adpDic_Mes.Adapter.Transaction = adpInt_Periodo.Adapter.Transaction;
            

            // Insertar el Periodo
            resultado = adpInt_Periodo.Insert(s, oInt_Periodo);

            //obtener la lista de meses en Dic_Mes
            List<Dic_Mes> listMeses = adpDic_Mes.Get(s);

            //insertar los meses para ese periodo en Int_Subperiodo
            foreach (Dic_Mes v_listMeses in listMeses)
            {
                Int_Subperiodo oint_Subperiodo = new Int_Subperiodo();

                oint_Subperiodo.Int_Periodo_Id = oInt_Periodo.Id;
                oint_Subperiodo.Dic_Mes_Id = v_listMeses.Id;

                adpInt_Subperiodo.Insert(s, oint_Subperiodo);
            }

            adpInt_Periodo.Adapter.CommitTransaction();
        }
        catch (Exception e)
        {
            adpInt_Periodo.Adapter.RollbackTransaction();
            throw (e);
        }
        return resultado;
    }
   
    public static int Delete(Scope s,  Int_Periodo oIntPeriodo)
    {
        int resultado = 0;
        try
        {
            adpInt_Periodo.Adapter.BeginTransaction();
            adpInt_Subperiodo.Adapter.Transaction = adpInt_Periodo.Adapter.Transaction;
            adpDic_Mes.Adapter.Transaction = adpInt_Periodo.Adapter.Transaction;

            //Listado de los subperiodos
            List<Int_Subperiodo> list_Subperiodos =
                adpInt_Subperiodo.GetByPeriodo(s, oIntPeriodo.Id);


            // Borra los subperiodos del periodo que se va a borrar
            foreach (Int_Subperiodo v_IntSubperiodo in list_Subperiodos) 
            {
              adpInt_Subperiodo.Delete(s, v_IntSubperiodo);
                
            }

            resultado = adpInt_Periodo.Delete(s, oIntPeriodo);

            adpInt_Periodo.Adapter.CommitTransaction();
        }
        catch (Exception e)
        {
            adpInt_Periodo.Adapter.RollbackTransaction();
            throw (e);
        }
        return resultado;
    }
    #endregion
    }
    }
